package com.humanresource.service.clerksalary;

import java.util.List;

import com.humanresource.domain.po.clerkrecord.Clerkinstpos;
import com.humanresource.domain.po.clerksalary.Clerkrewardpunishstandard;
import com.humanresource.domain.po.clerksalary.Rewardpunishmentstandard;
import com.humanresource.domain.po.clerksalary.Salarydistribution;
import com.humanresource.domain.po.clerksalary.Salarydistributiondetail;
import com.humanresource.domain.po.clerksalary.Salarystandard;
import com.humanresource.domain.vo.clerksalary.SalaryDistributionDetailVO;

public interface SalarystandardService {

	/**
	 * 添加薪酬标准
	 * @param salarystandard
	 */
	public void insert(Salarystandard salarystandard);

	/**
	 * 根据薪酬标准编号获取薪酬标准
	 * @param salarystandardId
	 * @return
	 */
	public Salarystandard findById(String salarystandardId);

	/**
	 * 根据薪酬标准名称获取薪酬标准
	 * @param salarystandardName
	 * @return
	 */
	public Salarystandard findByName(String salarystandardName);

	/**
	 * 查询未通过复核的薪酬标准项目
	 * @return
	 */
	public List<Salarystandard> findbyAuditstate(String Auditstate);

	/**
	 * 根据主键修改薪酬标准
	 * @param salarystandard
	 */
	public void update(Salarystandard salarystandard);

	/**
	 * 关键字查询条件在薪酬标准名称、制定人、变更人和复核人字段进行匹配
	 * @param keyword
	 * @return
	 */
	public List<Salarystandard> keywordquery(String keyword, String starttime,
			String endtime);

	/**
	 * 根据条件查询薪酬标准列表
	 * * 薪酬标准编号、关键字和登记时间
	 * @param salarystandardid
	 * @param keyword
	 * @param starttime
	 * @param endtime
	 * @return
	 */
	public List<Salarystandard> findlikequery(String salarystandardid,
			String keyword, String starttime, String endtime);

	/**
	 * 根据薪酬标准编号计算该薪酬标准的基本薪酬
	 * @param salarystandardId
	 * @return
	 */
	public Float getBasicSalaryMoneyBySalarystandardId(String salarystandardId);

	/**废弃
	 * 根据clerkinstposList计算出该机构下的基本薪酬总额
	 * @param clerkinstposList
	 * @return
	 */
	@Deprecated
	public Float getBasicSalaryMoneySum(List<Clerkinstpos> clerkinstposList);

	/**
	 * 根据机构找出所有该机构下每个员工的详细薪酬信息
	 * @param clerkinstpos
	 * @return
	 */
	public List<SalaryDistributionDetailVO> getSalaryDistributionDetailVOListByClerkintpos(
			List<Clerkinstpos> clerkinstpos);

	/**
	 * 根据员工编号获得员工的奖惩情况
	 * @param ClerkId
	 * @return
	 */
	public List<Clerkrewardpunishstandard> clerkrewardpunishstandardsByClerkId(
			Integer ClerkId);

	/**
	 * 根据奖惩标准编号获得奖惩标准
	 * @param rewardpunishmentstandardId
	 * @return
	 */
	public Rewardpunishmentstandard rewardpunishmentstandard(
			String rewardpunishmentstandardId);

	/**
	 * 创建薪酬发放单
	 * @param salarydistribution
	 */
	public void createSalaryDistribution(Salarydistribution salarydistribution);

	/**
	 * 查询所有待复核的薪酬发放表
	 * @return
	 */
	public List<Salarydistribution> findSalaryDistributionNoCheck();

	/**
	 * 根据机构名查询机构组所在的薪酬发放单
	 */
	public Salarydistribution findSalarydistributionByInstName(String instname);

	/**
	 * 根据员工所在机构生成或更新薪酬发放单，并由职位名设置该机构的薪酬发放总额或更新薪酬发放总额
	 * * 当薪酬发放单存在该机构组的薪酬发放时，更新该组的薪酬发放记录
	 * * 如果当前机构还没有薪酬发放单时，则为该机构添加薪酬发放单
	 * @param instname
	 */
	public void createOrupdateSalarydistribution(String instname, String posname);

	/**
	 * 查询所有薪酬发放登记
	 * @return
	 */
	public List<Salarydistribution> findAllSalarystandardNoBook();

	/**
	 * 第一次在系统上登记员工信息时，初始化生成该员工的薪酬详细发放记录
	 * @param clerkrecords
	 */
	public void createSalarydistributiondetail(String recordsid,
			Integer clerkid, String instname, Salarystandard salarystandard);

	/**
	 * 根据三级机构获取所有薪酬发放详细情况
	 * @param instname
	 * @return
	 */
	public List<Salarydistributiondetail> findByInstname(String instname,
			String auditstate);

	/**
	 * 更新薪酬发放详细表
	 * @param salaryDistributionDetail
	 */
	public void updateSalaryDistributionDetail(
			Salarydistributiondetail salaryDistributionDetail);

	/**
	 * 更新薪酬发放表
	 * @param salaryDistribution
	 */
	public void updateSalaryDistribution(
			Salarydistributiondetail salaryDistributionDetail);

	/**
	 * 计算某个详细薪酬表的总基本总额
	 * @param salarydistributiondetail
	 * @return
	 */
	public Float CaculateSalaryDistributionDetail(
			Salarydistributiondetail salarydistributiondetail);

	/**
	 * 查询所有待复核的薪酬发放单
	 * @return
	 */
	public List<Salarydistribution> findAllSalarystandardNoCheck();

}
